$(function() {
			// 重置表格div高度
			$("#dop-main-contain").css({
						"height" : $(window).height() - 1 + "px"
					});

			$("#dop-main-right-ordergrid").css({
				"height" : $(window).height()
						- $("#dop-main-right-region").height()
						- $("#dop-main-right-store").height()
						- $("#dop-main-right-deliverystatus").height() - 25
						+ "px"
			});

			$("#dop-main-right-ordergrid-body").css({
				"height" : $("#dop-main-right-ordergrid").height()
						- $("#dop-main-right-ordergrid-head").height() - 5
						+ "px"
			});

			/**
			 * 地图的全局对象
			 */
			var mapManager;

			// remove easy UI panel's scroll in IE8+
			$(".panel-body-noborder", parent.document).each(function() {
				var _this = $(this), isNoScrollFlag = false;
				_this.find("iframe").each(function() {
					var _that = $(this);
					if (_that.attr("src")
							.indexOf("dopMainController.do?index&isIframe&") >= 0) {
						isNoScrollFlag = true;
						return false;
					}
				});
				if (isNoScrollFlag) {
					_this.css({
								"overflow" : "hidden"
							});
					return false;
				}
			});

			// 初始化区域数据
			// 默认不显示在地图中
			// InitializeRegionDate();

			// 初始化地图显示
			InitializeMap();

			// 添加店面信息
			getStorefront();

			// 更新配送员信息
			// setTimeout(getDeliveryMan, 3000);
			getDeliveryMan(); // 第一次获取配件员信息
			setInterval(getDeliveryMan, 5000); // 每隔5秒获取一次配件员位置
			// 更新订单信息，？
			// 点击区域的时候再显示订单？

			// 更新订单表格
			var orderGrid;
			initializeOrderGrid();

			// 更新订单信息
			getOrders();

		});

/**
 * 初始化区域数据
 */
function InitializeRegionDate() {
	EapTools.doAction("areaController.do?loadData", {
				pageNum : 1,
				pageSize : 20
			}, true, function(data) {
				if (data) {
					var $regionbody = $("#dop-main-right-region-body");
					var $allRegion = createLabel("全部");
					$allRegion.addClass("dop-main-right-item-selected");
					$regionbody.append($allRegion); // 添加全部
					for (var i = 0; i < data.length; i++) {
						var thisData = data[i];
						$regionbody.append(createLabel(thisData.baseAreaName,
								thisData.id));
					}
				}
			});

	function createLabel(name, id) {
		var contentStr = "<a class='eap-panel-body-content dop-main-right-region-body-content' href='javascript:void(0);'>"
				+ name + "</a>"
		var $region = $(contentStr).click(function(e) {
			if (ExpLink.Utility.isDefAndNotNull(id)) {
				$("#dop-main-right-region-head").text("区域选择-" + name).attr(
						"regionid", id); // 记录区域当前ID
			} else {
				$("#dop-main-right-region-head").text("区域选择-" + name)
						.removeAttr("regionid");
				// 全部区域则不显示区域： 清除已有区域的显示
				mapManager.getMarkerManager().clearBusinessRegions();
			}
			$(this).addClass("dop-main-right-item-selected").siblings()
					.removeClass("dop-main-right-item-selected");
			dopMainAppendQuery(id);
		});
		return $region;
	}

};

/**
 * 获取店面信息
 */
function getStorefront() {
	EapTools.doAction("storefrontController.do?findData", {}, true, function(
					data) {
				// 初始化店面数据
				if (data) {
					var $storebody = $("#dop-main-right-store-body");
					var $allStore = createLabel("全部");
					$allStore.addClass("dop-main-right-item-selected"); // 默认选中哦
					$storebody.append($allStore); // 添加全部
					for (var i = 0; i < data.length; i++) {
						var thisData = data[i];
						$storebody.append(createLabel(thisData.stoName,
								thisData.id));
					}

					mapManager.getMarkerManager().setShopInformations(data); // 显示店面信息。
				}

			});

	function createLabel(name, id) {
		var contentStr = "<a class='eap-panel-body-content dop-main-right-region-body-content' href='javascript:void(0);'>"
				+ name + "</a>"
		var $store = $(contentStr).click(function(e) {
			if (ExpLink.Utility.isDefAndNotNull(id)) {
				$("#dop-main-right-store-head").text("店面选择-" + name).attr(
						"storeid", id); // 记录店面当前ID
			} else {
				$("#dop-main-right-store-head").text("店面选择-" + name)
						.removeAttr("storeid"); //
				// 显示全部店面marker
				mapManager.getMarkerManager().setShopVisible(true);
			}

			$(this).addClass("dop-main-right-item-selected").siblings()
					.removeClass("dop-main-right-item-selected");
			storeClickQuery(id);

			// 筛选店面相关的区域数据进行显示
			displayRegionByStoreID(id);
		});
		return $store;
	}

}

/**
 * 获取配送员信息
 */
function getDeliveryMan() {

	// 获取参数
	var isHavePOS = $("#dop-main-right-deliverystatus-pos").prop("checked"); // pos机
	var isHaveWarmBox = $("#dop-main-right-deliverystatus-warmbox")
			.prop("checked"); // 保温箱

	EapTools.doAction("deliveryManController.do?findDataByProperty", {
				havingpos : isHavePOS,
				havingwarmbox : isHaveWarmBox
			}, true, function(data) {
				mapManager.getMarkerManager().setCourierInformations(data);
			});
}

/**
 * 初始化地图
 */
function InitializeMap() {
	// 初始化地图
	mapManager = new ExpLink.ExpdopMap();
	mapManager.initializeMap({
				map : 'dop-main-mappanel'
			});

	// 初始化订单监控中需要的marker管理对象

	mapManager.InitializeMarkerManager();

	mapManager.add("shopclick", function(e) {

		// 点击时显示店面相关信息
		var infoWindow = new BMap.InfoWindow("<div style='line-height:1.8em;font-size:12px;'> <b>店名:</b>"
				+ e.target.stoName
				+ "</br><b>地址:</b>"
				+ e.target.stoAddress
				+ "</br></div>"); // 创建信息窗口对象
		var position = JSON.parse(e.target.stoCoordinate)
		e.target.map.openInfoWindow(infoWindow, new BMap.Point(position.lng,
						position.lat));

	});

	mapManager.add("courierclick", function(e) {

		// 判断当前是否存在选中的订单，如果存在选中的订单，那么执行分单操作
		// 如果不存在选中的订单，那么在右侧显示配送员信息
		// debugger;
		// var orderItems = $(".eap-panel-body-list_item_checkbox:checked");
		var orderItems = orderGrid("getChecked");

		if (orderItems.length == 0) {
            var delPhone=e.target.delTelephone||"";
			var infoWindow = new BMap.InfoWindow("<div style='line-height:1.8em;font-size:12px;'><img src='"
					+ "webpage/dop/map/images/courier.jpg"
					+ "' style='float:right;width:100px;height:100px;margin-top:10px;'></img> <b>姓名:</b>"
					+ e.target.delName
					+ "</br><b>电话:</b>"
					+ delPhone
					+ "</br></div>"); // 创建信息窗口对象
			var position = JSON.parse(e.target.coordinate)
			e.target.map.openInfoWindow(infoWindow, new BMap.Point(
							position.lng, position.lat));
		} else if (orderItems.length > 0) {
			// 先去数据库查询数据，看看是否可以接单，页面信息现有5秒的延迟。 //ztmdt.
			// 刷新全部的配送员数据
			var deliverDeferred = $.Deferred();
			var isHavePOS = $("#dop-main-right-deliverystatus-pos")
					.prop("checked"); // pos机
			var isHaveWarmBox = $("#dop-main-right-deliverystatus-warmbox")
					.prop("checked"); // 保温箱
			var dbDeliveryman = null;
			EapTools.doAction("deliveryManController.do?findDataByProperty", {
						havingpos : isHavePOS,
						havingwarmbox : isHaveWarmBox
					}, true, function(data) {
						mapManager.getMarkerManager()
								.setCourierInformations(data);

						for (var k = 0, length = data.length; k < length; k++) {
							if (data[k].id == e.target.id) {
								dbDeliveryman = data[k];
							}
						}

						deliverDeferred.resolve();
					});

			deliverDeferred.done(function() {

				if (dbDeliveryman == null || dbDeliveryman.status != 1) // 配送员不可以接单
				{
					$.messager.show({
								title : '提示',
								msg : '配送员： ' + e.target.delName + ' 当前不可以接单',
								showType : 'show'
							});
					return;
				}

				var deliveryID = e.target.id;
				var orderIDs = []
				for (var int = 0, length = orderItems.length; int < length; int++) {
					orderIDs.push(orderItems[int].id);
				}
				// 分单信息记录
				var courierMan = e.target;
				var delName = courierMan.delName;
				var count = orderIDs.length;

				// 给出一些分单约束方面的提醒
				// 感觉写的代码这么奇怪呢！！！？？？

				illegalArea(function() // 区域校验
						{
							illegalStore(function() // 店面校验
									{
										illegalProperty(function() // 设施校验
												{
													refuseMan(function() // 被拒历史校验
															{
																dispatchOrder();
															});

												});
									});
						});

				// 1.跨区域配送
				function illegalArea(sucess) {
					var illegalList = [];
					for (var int2 = 0, length = orderItems.length; int2 < length; int2++) {
						var idx = courierMan.areaIdList
								.indexOf(orderItems[int2].regionid);
						if (idx == -1) // 不可接单
						{
							illegalList.push(orderItems[int2].regionname);
						}
					}
					if (illegalList.length > 0) {
						var msg = "配送员:" + delName + " 默认不可接取区域 "
								+ illegalList.join(",")
								+ " 的订单。\r\n是否继续进行分单操作？"
						$.messager.confirm('警告', msg, function(r) {
									if (r) {
										sucess();
									}
								});
					} else {
						sucess();
					}

				}

				// 2.跨店面
				function illegalStore(sucess) {
					var illegalList = [];
					for (var int2 = 0, length = orderItems.length; int2 < length; int2++) {
						var idx = courierMan.storefrontIdList
								.indexOf(orderItems[int2].storeid);
						if (idx == -1) // 不可接单
						{
							illegalList.push(orderItems[int2].storename);
						}
					}
					if (illegalList.length > 0) {
						var msg = "配送员:" + delName + " 默认不可接取店面："
								+ illegalList.join(",")
								+ " 的订单。\r\n是否继续进行分单操作？"
						$.messager.confirm('警告', msg, function(r) {
									if (r) {
										sucess();
									}
								});
					} else {
						sucess();
					}

				}

				// 3.属性检测 ： 保温箱 pos机

				function illegalProperty(sucess) {
					var illegalPOSList = [];
					var illegalWBList = [];
					for (var int2 = 0, length = orderItems.length; int2 < length; int2++) {
						// pos
						if (orderItems[int2].havingposid == 3
								&& courierMan.havingPOS != 1) {
							// （配件员不符合要求）
							illegalPOSList.push(orderItems[int2].code);
						}
						// 保温箱
						if (orderItems[int2].havingwarmboxid == 1
								&& courierMan.havingWarmBox != 1) {
							// （配件员不符合要求）
							illegalWBList.push(orderItems[int2].code);
						}
					}
					if (illegalPOSList.length > 0 || illegalWBList.length > 0) {
						var info1 = "";
						var info2 = "";
						if (illegalPOSList.length > 0) {
							info1 = "订单：" + illegalPOSList.join(",")
									+ " 客户要求POS机支付\r\n";
						}
						if (illegalWBList.length > 0) {
							info2 = "订单：" + illegalWBList.join(",")
									+ " 需要保温箱\r\n";
						}
						var msg = info1 + info2 + "配送员:" + delName
								+ " 不满足基本要求。\r\n是否继续进行分单操作？"
						var mes = $.messager.confirm('警告', msg, function(r) {
									if (r) {
										sucess();
									}
								});
					} else {
						sucess();
					}
				}

				// 拒绝接单历史
				function refuseMan(sucess) {
					var illegalList = [];
					for (var int2 = 0, length = orderItems.length; int2 < length; int2++) {
						if (orderItems[int2].refusehistory != null
								&& orderItems[int2].refusehistory != "") {
							var refuseMans = orderItems[int2].refusehistory
									.split(',');
							var idx = refuseMans.indexOf(courierMan.id);
							if (idx >= 0) // 此单被此配送员拒绝过
							{
								illegalList.push(orderItems[int2].code);
							}
						}

					}
					if (illegalList.length > 0) {
						var msg = "配送员:" + delName + " 曾拒绝过单号："
								+ illegalList.join(",")
								+ " 的订单。\r\n是否继续进行分单操作？"
						$.messager.confirm('警告', msg, function(r) {
									if (r) {
										sucess();
									}
								});
					} else {
						sucess();
					}
				}

				// 分单
				function dispatchOrder() {
					// 分配订单
					EapTools.doAction(
							"manualDistributeController.do?distribute", {
								deliveryManId : deliveryID,
								orderIdList : orderIDs
							}, true, function(data) {
								if (!data) {
									return;
								}
								// 成功 1.给出信息提示， 2.将当前列表中项删掉

								if (data.success) {
									// $("#dop-main-right-bottom-status").text("分单成功");
									$.messager.show({
												title : '分单成功',
												msg : '此次共分配 ' + count
														+ ' 单给配送员：' + delName,
												showType : 'show'
											});
									// 刷新地图和右侧列表
									var regionID = $("#dop-main-right-region-head")
											.attr("regionid");
									queryOrder(regionID);
								} else {
									// $("#dop-main-right-bottom-status").text("分单失败");

									$.messager.show({
												title : '分单失败',
												msg : '分单失败',
												showType : 'show'
											});

								}
								// 失败 1.失败原因
							});
				}
			});

		}

	});

};

/**
 * 初始化表格
 */
function initializeOrderGrid() {
	var $orderGridPanel = $("#dop-main-right-ordergrid-body");
	orderGrid = $orderGridPanel.datagrid.bind($orderGridPanel);

	// 基本属性以及表头
	orderGrid({
				url : "",
				pagination : false,
				fitColumns : false,
				singleSelect : true,
				fit : false,
				pageSize : 10,
				pageList : [10, 20, 30, 50],
				sortOrder : 'desc',
				rownumbers : true,
				showFooter : true,
				checkOnSelect : false,
				selectOnCheck : false,
				frozenColumns : [[{
							field : 'ck',
							checkbox : true
						}]],
				columns : [[{
							field : "id",
							width : 150,
							title : "主键",
							hidden : true
						}, {
							field : "code",
							width : 100,
							title : "单号"
						}, {
							field : "regionid",
							width : 80,
							title : "区域id",
							hidden : true
						}, {
							field : "regionname",
							width : 80,
							title : "区域"
						}, {
							field : "storeid",
							width : 100,
							title : "店面id",
							hidden : true
						}, {
							field : "storename",
							width : 100,
							title : "店面"
						}, {
							field : "custname",
							width : 80,
							title : "客户姓名"
						}, {
							field : "custposition",
							width : 80,
							title : "坐标",
							hidden : true
						}, {
							field : "address",
							width : 320,
							title : "地址"
						}, {
							field : "havingposid",
							width : 60,
							title : "支付方式",
							hidden : true
						}, {
							field : "havingpos",
							width : 60,
							title : "支付方式"
						}, {
							field : "havingwarmboxid",
							width : 80,
							title : "保温",
							hidden : true
						}, {
							field : "havingwarmbox",
							width : 50,
							title : "保温"
						}, {
							field : "refusehistory",
							width : 60,
							title : "被拒绝历史",
							hidden : true
						}]]
			});

	// 特殊行风格设置

	orderGrid({
				rowStyler : function(index, row) {
					if (!ExpLink.Utility.isDefAndNotNull(row.custposition)) {
						return 'background-color:#ff5050;color:#fff;'; // 
					}
				}
			});

	// 事件
	orderGrid({
				"onDblClickRow" : function(index, data) {

				}
			});
	orderGrid({
				"onClickRow" : function(index, data) {

					if (!ExpLink.Utility.isDefAndNotNull(data)) {
						return;
					}
					// 相关的店面和订单都要意思一下
					mapManager.getMarkerManager()
							.setShopAnimation(data.storeid);

					// 是否显示区域 ？ 显示：不显示
					var regionID = $("#dop-main-right-region-head")
							.attr("regionid");
					if (ExpLink.Utility.isDefAndNotNull(regionID)
							|| !ExpLink.Utility.isDefAndNotNull(data.regionid)) {
						return;
					}

					EapTools.doAction("areaController.do?getById", {
								"id" : data.regionid
							}, true, function(data) {
								if (data) {
									mapManager.getMarkerManager()
											.showBusinessRegions({
														name : data.id,
														regions : [data.baseCoordinate]
													});
								}
							});

				}
			})
}

/**
 * 区域
 * 
 * @param regionid
 */

function getOrders() {
	function getOrderItems() {
		var regionID = $("#dop-main-right-region-head").attr("regionid");
		var storeID = $("#dop-main-right-store-head").attr("storeid");
		queryOrder(regionID, storeID);
	}

	getOrderItems();

	setInterval(getOrderItems, 10000);
}

var clickUpdate = false;
function dopMainAppendQuery(queryId) {
	clickUpdate = true;
	var storeID = $("#dop-main-right-store-head").attr("storeid");
	queryOrder(queryId, storeID);
};

function storeClickQuery(storeId) {
	var regionID = $("#dop-main-right-region-head").attr("regionid");
	queryOrder(regionID, storeId);
};

/**
 * 通过店id查询相关联区域并显示
 * 
 * @param {}
 *            storeid 店id
 */
function displayRegionByStoreID(storeid) {
	EapTools.doAction("areaController.do?getAreaByStoreId", {
				"storeId" : storeid
			}, true, function(data) {

				if (data) {
					// 添加多边形显示
					// 数据稍作处理
					regions = [];
					for (var i = 0, length = data.obj.length; i < length; i++) {
						/**
						 * 如果区域是启用中并且没有删除，才能显示
						 */
						if(data.obj[i].baseEnable==1&&data.obj[i].baseDelete==1){
							regions.push(data.obj[i].baseCoordinate);
						}
					}
					mapManager.getMarkerManager().showBusinessRegions({
								name : storeid,
								regions : regions
							});
					// 定位到此多边形
					/*
					 * if (clickUpdate) { mapManager.getMarkerManager()
					 * .FlyTo(regionVO.baseCoordinate); clickUpdate = false; }
					 */
				}
			});

};

// 查询条件追加
function queryOrder(regionId, storeId) {

	EapTools.doAction("areaController.do?queryByRSIdAndOrderStatusList", {
				"regionId" : regionId,
				"storeId" : storeId,
				"orderStatusList" : [1, 2, 3, 4]
			}, true, function(data) {

				if (data) {
					// 添加多边形显示
					var regionVO = data.attributes.areaVO;
					if (regionVO) {
						mapManager.getMarkerManager().showBusinessRegions({
									name : regionVO.id,
									regions : [regionVO.baseCoordinate]
								});
						// 定位到此多边形
						if (clickUpdate) {
							mapManager.getMarkerManager()
									.FlyTo(regionVO.baseCoordinate);
							clickUpdate = false;
						}
					}

					// 表格中添加订单
					var orderVOList = data.attributes.orderVOList;
					var gridData = orderGrid('getData');
					var existsRows = gridData.rows;
					var newData = orderVOList;
					var removeRows = ExpLink.algo.linq(existsRows).difference(
							newData, function(ele) {
								return ele.code;
							}, function(ele) {
								if (ele.status == 1) // 只有未分配的订单才有资格参与运算
								{
									return ele.code;
								} else {
									return "";
								}
							}).toArray();

					for (var int = 0, length = removeRows.length; int < length; int++) {
						var rowIndex = orderGrid('getRowIndex', removeRows[int]);
						orderGrid('deleteRow', rowIndex);
					}

					var newRows = ExpLink.algo.linq(newData).difference(
							existsRows, function(ele) {
								return ele.code;
							}).toArray();

					for (var int2 = 0, length = newRows.length; int2 < length; int2++) {
						var dataItem = newRows[int2];

						if (dataItem.status != 1) {
							continue;
						}

						orderGrid('appendRow', {
									id : dataItem.id,
									code : dataItem.code,
									regionid : dataItem.regionID,
									regionname : dataItem.regionName,
									storeid : dataItem.storefrontID,
									storename : dataItem.storefrontName,
									custname : dataItem.custName,
									custposition : dataItem.custPosition,
									address : dataItem.custAddress,
									havingposid : dataItem.payMethod,
									havingpos : dataItem.payMethodText,
									havingwarmboxid : dataItem.needWarmBox,
									havingwarmbox : dataItem.needWarmBoxText,
									refusehistory : dataItem.refuseDeliveryman
								});
					}

					// 定位到订单
					// var position =
					// mapManager.getMarkerManager().getOrderMarkerPosition(currentOrder.id);
					// if(position != null)
					// {
					// mapManager.centerAndZoom(position.lng, position.lat, 15);
					// }

					// 将订单添加到地图中显示(未时时的进行刷新)

					mapManager.getMarkerManager().showOrders({
								orders : orderVOList
							});

				}

			});
};
